package com.hbisdt.cet.sample.timer;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * @author : 教学案例
 * @version : 1.0
 * @date : 2025-05-08 15:52
 */
@Component
public class TimerDemo {
    private static final SimpleDateFormat sf =
            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private int scanCount = 1;    //扫描任务计数器
    private int collectCount = 1; //采集任务计数器
    private int emailCount = 1;   //邮件任务计数器

    /**
     * 模拟定时扫描设备
     * 该方法配置了定时任务，用于周期性地执行设备扫描操作
     * fixedRate：每次执行扫描的时间间隔，设置为60000毫秒（60秒）
     */
    @Scheduled(fixedRate = 60000)
    public void scanDevices() {
        System.out.println(String.format("fixedRate(定时扫描设备)" +
                        "第%s次执行，" +
                        "当前时间为：%s",
                scanCount++, sf.format(new Date())));
    }

    /**
     * 模拟定时采集数据
     * 该方法配置了定时任务，用于周期性地执行采集数据操作
     * fixedDelay：每次执行采集的时间间隔，设置为60000毫秒（60秒）
     */
    @Scheduled(fixedDelay = 60000)
    public void collectDatas() throws InterruptedException {
        System.out.println(String.format("fixedDelay(定时采集数据)" +
                        "第%s次执行，" +
                        "当前时间为：%s",
                collectCount++, sf.format(new Date())));
        Thread.sleep(10000); //模拟任务执行耗时，睡眠10秒
    }

    /**
     * 模拟定时发送邮件通知
     * cron表达式"0/30 * * * * *"，表示从每分钟的0秒开始，每隔30秒发一次邮件
     */
    @Scheduled(cron = "0/30 * * * * *")
    public void sendEmail() {
        System.out.println(String.format("cron(定时发送邮件)" +
                        "第%s次执行，" +
                        "当前时间为：%s",
                emailCount++, sf.format(new Date())));
    }
}
